package com.hqq.create.singleton;

/**
 * Singleton
 * 单例对象能保证在一个JVM中，该对象只有一个实例存在
 * 某些类创建比较频繁，对于一些大型的对象，这是一笔很大的系统开销。
 * 省去了new操作符，降低了系统内存的使用频率，减轻GC压力。
 * 有些类如交易所的核心交易引擎，控制着交易流程，如果该类可以创建多个的话，系统完全乱了。
 * 所以只有使用单例模式，才能保证核心交易服务器独立控制整个流程。
 * Created by heqianqian on 2017/3/10.
 */
public class Singleton {
    /*持有私有静态实例 防止被引用
    * 此处赋值null==> 实现延迟加载*/
//    private static Singleton instance = null;

    /*私有构造方法 防止被实例化*/
    private Singleton() {
    }

    private static class SingletonFactory{
        private static Singleton instance = new Singleton();
    }

    /*静态工程方法  创建实例*/
    public static Singleton getInstance() {
       /* if (instance == null) {
            synchronized (instance){
                instance = new Singleton();
            }
        }*/
        return SingletonFactory.instance;
    }

    /*如果该对象被用于序列化 可以保证序列化前后一致*/
    public Object readResolve() {
        return SingletonFactory.instance;
    }
}
